//给出两个 非空 的链表用来表示两个非负的整数。其中，它们各自的位数是按照 逆序 的方式存储的，并且它们的每个节点只能存储 一位 数字。 
//
// 如果，我们将这两个数相加起来，则会返回一个新的链表来表示它们的和。 
//
// 您可以假设除了数字 0 之外，这两个数都不会以 0 开头。 
//
// 示例： 
//
// 输入：(2 -> 4 -> 3) + (5 -> 6 -> 4)
//输出：7 -> 0 -> 8
//原因：342 + 465 = 807
// 
// Related Topics 链表 数学


package leetcode.editor.cn;

public class P2AddTwoNumbers {
    public static void main(String[] args) {
        Solution solution = new P2AddTwoNumbers().new Solution();
        //TO TEST




    }


//leetcode submit region begin(Prohibit modification and deletion)

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     * int val;
     * ListNode next;
     * ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode c1 = l1;
            ListNode c2 = l2;
            ListNode p = new ListNode(0);
            ListNode c = p;
            int j = 0;
            boolean flag = true;
            while (flag) {
                int v1 = c1 == null ? 0 : c1.val;
                int v2 = c2 == null ? 0 : c2.val;
                int s1 = v1 + v2 + j;
                int y = s1 % 10;
                j = s1 / 10;
                c.val = y;
                if (c1 != null) {
                    c1 = c1.next;
                }
                if (c2 != null) {
                    c2 = c2.next;
                }
                if (j > 0 || c1 != null || c2 != null) {
                    ListNode n = new ListNode(0);
                    c.next = n;
                    c = n;
                }else {
                    flag = false;
                }
            }
            return p;
        }
    }

    //leetcode submit region end(Prohibit modification and deletion)
    class ListNode {
        int val;
        ListNode next;
        ListNode(int x) {
            val = x;
        }
    }
}